home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 July / EnigmA AMIGA RUN 20 (1997)(G.R. Edizioni)(IT)[!][issue 1997-07 & 08][EAR-CD IV].iso / earcd / disk / cdrom / playtrac.lha / Source / Resource.s < prev   
Text File  |  1997-04-08  |  21KB  |  1,246 lines

  1.     include    'exec/types.i'
  2.     include    'exec/memory.i'
  3.     include    'exec/interrupts.i'
  4.     include    'exec/io.i'
  5.     include    'exec/libraries.i'
  6.     include 'exec/execbase.i'
  7.     include    'exec/exec_lib.i'
  8.     include    'graphics/gfxbase.i'
  9.     include    'graphics/displayinfo.i'
  10.     include    'intuition/intuition.i'
  11.     include 'intuition/intuition_lib.i'
  12.     include    'devices/audio.i'
  13.     include    'devices/scsidisk.i'
  14.     include    'hardware/custom.i'
  15.     include    'hardware/intbits.i'
  16.     include    'hardware/dmabits.i'
  17.     include    'hardware/adkbits.i'
  18.     include    'hardware/cia.i'
  19.     include    'graphics/graphics_lib.i'
  20.     include    'dos/dos.i'
  21.     include    'dos/dos_lib.i'
  22.     include    'audio_driver.i'
  23.     include    'libraries/gadtools.i'
  24.     include    'libraries/gadtools_lib.i'
  25.         
  26.     include    'resource.i'
  27.  
  28.     section audio_code,code
  29.  
  30. ;**********************************************************************
  31.  
  32.     XDEF    _StartResource
  33.     XDEF    @StartResource
  34.     
  35. _StartResource
  36. @StartResource
  37. StartResource:
  38.  
  39.     movem.l    d0-d1/a0-a1,-(sp)
  40.     bsr    ActivateNewResource
  41.     lea    intuition_name(pc),a1
  42.     moveq    #37,d0
  43.     moveq    #E_PLACE|E_FATALERROR,d1
  44.     bsr    R_OpenLibrary
  45.     move.l    d0,_IntuitionBase
  46.     lea    dos_name(pc),a1
  47.     moveq    #37,d0
  48.     moveq    #E_PLACE|E_FATALERROR,d1
  49.     bsr    R_OpenLibrary
  50.     move.l    d0,_DOSBase
  51.     lea    graphics_name(pc),a1
  52.     moveq    #37,d0
  53.     moveq    #E_PLACE|E_FATALERROR,d1
  54.     bsr    R_OpenLibrary
  55.     move.l    d0,_GfxBase
  56.     lea    gadtools_name(pc),a1
  57.     moveq    #37,d0
  58.     moveq    #E_PLACE|E_FATALERROR,d1
  59.     bsr    R_OpenLibrary
  60.     move.l    d0,_GadToolsBase    
  61.     movem.l    (sp)+,d0-d1/a0-a1
  62.     rts
  63.     
  64. graphics_name    dc.b    'graphics.library',0
  65. intuition_name    dc.b    'intuition.library',0
  66. dos_name    dc.b    'dos.library',0
  67. gadtools_name    dc.b    'gadtools.library',0
  68.  
  69.  
  70. ;**********************************************************************
  71.  
  72.     ;Global Variables
  73.  
  74.     cnop    0,4
  75.  
  76. _IntuitionBase    dc.l    0
  77. _DOSBase    dc.l    0
  78. _GfxBase    dc.l    0
  79. _GadToolsBase    dc.l    0
  80.  
  81. originalStack    dc.l    0
  82.     
  83. mainList    dc.l    0
  84. resList        dc.l    0
  85. resNext        dc.l    0
  86.  
  87.  
  88. ;**********************************************************************
  89.  
  90.     cnop    0,4
  91.     
  92. _LVOAllocBitMap    EQU    -$396
  93. _LVOFreeBitMap    EQU    -$39C
  94.     
  95.     ;d0    =    width
  96.     ;d1    =    height
  97.     ;d2    =    depth
  98.     ;d3    =    flags
  99.  
  100.     XDEF    _R_AllocBitMap
  101.     XDEF    @R_AllocBitMap
  102.  
  103. _R_AllocBitMap    
  104. @R_AllocBitMap
  105. R_AllocBitMap
  106.     
  107.     movem.l    d4-d7/a0-a1/a6,-(sp)
  108.     move.l    d0,d4
  109.     move.l    d1,d5
  110.     move.l    d2,d6
  111.     move.w    d3,d7
  112.     move.l    _GfxBase(pc),a6
  113. R_ABM1    moveq    #11,d3
  114.     suba.l    a0,a0
  115.     jsr    _LVOAllocBitMap(a6)
  116.     move.l    d0,d2
  117.     bne    R_ABM2
  118.     lea    r_abmErr(pc),a0
  119.     move.l    d7,d0
  120.     bsr    ProduceError
  121.     tst.w    d0
  122.     beq    R_ABM3
  123.     move.l    d4,d0
  124.     move.l    d5,d1
  125.     move.l    d6,d2
  126.     bra    R_ABM1
  127. R_ABM2    andi.w    #E_PLACE,d7
  128.     moveq    #R_BITMAP,d0
  129.     moveq    #rl_SIZEOF,d1
  130.     bsr    Res_PlaceList
  131. R_ABM3    move.l    d2,d0
  132.     movem.l    (sp)+,d4-d7/a0-a1/a6
  133.     rts
  134.     
  135. r_abmErr    dc.b    'Could not create bitmap.',0
  136.  
  137. ;**********************************************************************
  138.  
  139.     cnop    0,4
  140.     
  141.     ;a0    =    Screen Name
  142.     ;d0    =    flags
  143.     ;return    =    d0
  144.  
  145.     XDEF    _R_LockPubScreen
  146.     XDEF    @R_LockPubScreen
  147.     
  148. @R_LockPubScreen
  149. _R_LockPubScreen
  150. R_LockPubScreen
  151.  
  152.     movem.l    d1-d3/a5-a6,-(sp)
  153.     move.l    a0,a5
  154.     move.l    d0,d3
  155.     move.l    _IntuitionBase,a6
  156. RLS_1    jsr    _LVOLockPubScreen(a6)
  157.     move.l    d0,d2
  158.     bne    RLS_2
  159.     lea    r_lpsErr(pc),a0
  160.     move.l    d3,d0
  161.     bsr    ProduceError
  162.     tst.l    d0
  163.     beq    RLS_3
  164.     move.l    a5,a0
  165.     bra    RLS_1
  166. RLS_2    andi.b    #E_PLACE,d3
  167.     beq    RLS_3
  168.     moveq    #R_LOCKSCREEN,d0
  169.     moveq    #rl_SIZEOF,d1
  170.     bsr    Res_PlaceList
  171. RLS_3    move.l    d2,d0
  172.     movem.l    (sp)+,d1-d3/a5-a6
  173.     rts
  174.     
  175. r_lpsErr    dc.b    'Could not lock screen.',0
  176.  
  177. ;**********************************************************************
  178.  
  179.     cnop    0,4
  180.     
  181.     ;a0    =    Window
  182.     ;a1    =    Menu structure
  183.     ;d0    =    flags
  184.     ;no return
  185.     
  186.     XDEF    _R_SetMenuStrip
  187.     XDEF    @R_SetMenuStrip
  188.     
  189. _R_SetMenuStrip
  190. @R_SetMenuStrip
  191.  
  192.     movem.l    d1-d3/a4-a6,-(sp)
  193.     move.l    d0,d3
  194.     move.l    a0,a4
  195.     move.l    a1,a5
  196.     move.l    _IntuitionBase(pc),a6
  197. RSM_1    jsr    _LVOSetMenuStrip(a6)
  198.     tst.l    d0
  199.     bne    RSM_2
  200.     lea    r_smsErr(pc),a0
  201.     move.l    d3,d0
  202.     bsr    ProduceError
  203.     tst.l    d0
  204.     beq    RSM_3
  205.     move.l    a4,a0
  206.     move.l    a5,a1
  207.     bra    RSM_1
  208. RSM_2    andi.w    #E_PLACE,d3
  209.     beq    RSM_3
  210.     move.l    a5,d2
  211.     moveq    #R_MENUSTRIP,d0
  212.     moveq    #rl_SIZEOF,d1
  213.     bsr    Res_PlaceList
  214. RSM_3    movem.l    (sp)+,d1-d3/a4-a6
  215.     rts
  216.     
  217. r_smsErr    dc.b    'Could not set menu to window.',0
  218.  
  219. ;**********************************************************************
  220.  
  221.     cnop    0,4
  222.     
  223.     ;a0    =    NewWindow
  224.     ;a1    =    TagList
  225.     ;d0    =    flags
  226.     ;return    =    d0
  227.     
  228.     XDEF    _R_OpenWindowTags
  229.     XDEF    @R_OpenWindowTags
  230.     
  231. _R_OpenWindowTags
  232. @R_OpenWindowTags
  233.  
  234.     movem.l    d1-d3/a4-a6,-(sp)
  235.     move.l    a0,a4
  236.     move.l    a1,a5
  237.     move.l    d0,d3
  238.     move.l    _IntuitionBase(pc),a6
  239. ROW_1    jsr    _LVOOpenWindowTagList(a6)
  240.     move.l    d0,d2
  241.     bne    ROW_2
  242.     lea    R_owErr(pc),a0
  243.     move.l    d3,d0
  244.     bsr    ProduceError
  245.     tst.l    d0
  246.     beq    ROW_3
  247.     move.l    a4,a0
  248.     move.l    a5,a1
  249.     bra    ROW_1
  250. ROW_2    andi.w    #E_PLACE,d3
  251.     moveq    #R_WINDOW,d0
  252.     moveq    #rl_SIZEOF,d1
  253.     bsr    Res_PlaceList
  254. ROW_3    move.l    d2,d0
  255.     movem.l    (sp)+,d1-d3/a4-a6
  256.     rts
  257.  
  258. R_owErr        dc.b    'Could not open window.',0
  259.     
  260. ;**********************************************************************
  261.  
  262.     cnop    0,4
  263.     
  264.     ;a0    =    Screen
  265.     ;a1    =    TagList
  266.     ;d0    =    flags
  267.     ;return    =    d0
  268.     
  269.     XDEF    _R_GetVisualInfo
  270.     XDEF    @R_GetVisualInfo
  271.     
  272. _R_GetVisualInfo
  273. @R_GetVisualInfo
  274.  
  275.     movem.l    d1-d3/a4-a6,-(sp)
  276.     move.l    a0,a4
  277.     move.l    a1,a5
  278.     move.l    d0,d3
  279.     move.l    _GadToolsBase(pc),a6
  280. RGV_1    jsr    _LVOGetVisualInfoA(a6)
  281.     move.l    d0,d2
  282.     bne    RGV_2
  283.     lea    R_gviErr(pc),a0
  284.     move.l    d3,d0
  285.     bsr    ProduceError
  286.     tst.l    d0
  287.     beq    RGV_3
  288.     move.l    a4,a0
  289.     move.l    a5,a1
  290.     bra    RGV_1
  291. RGV_2    andi.w    #E_PLACE,d3
  292.     beq    RGV_3
  293.     moveq    #R_VISUAL,d0
  294.     moveq    #rl_SIZEOF,d1
  295.     bsr    Res_PlaceList
  296. RGV_3    move.l    d2,d0
  297.     movem.l    (sp)+,d1-d3/a4-a6
  298.     rts
  299.     
  300. R_gviErr    dc.b    'Could not get Visual Information.',0
  301.  
  302. ;**********************************************************************
  303.  
  304.     cnop    0,4
  305.     
  306.     ;a0    =    newMenu
  307.     ;a1    =    TagList
  308.     ;d0    =    flags
  309.     ;return    =    d0
  310.     
  311.     XDEF    _R_CreateMenus
  312.     XDEF    @R_CreateMenus
  313.     
  314. _R_CreateMenus
  315. @R_CreateMenus
  316.  
  317.     movem.l    d1-d3/a4-a6,-(sp)
  318.     move.l    a0,a4
  319.     move.l    a1,a5
  320.     move.l    d0,d3
  321.     move.l    _GadToolsBase(pc),a6
  322. RCM_1    jsr    _LVOCreateMenusA(a6)
  323.     move.l    d0,d2
  324.     bne    RCM_2
  325.     lea    R_cmErr(pc),a0
  326.     move.l    d3,d0
  327.     bsr    ProduceError
  328.     tst.l    d0
  329.     beq    RCM_2
  330.     move.l    a4,a0
  331.     move.l    a5,a1
  332.     bra    RCM_1
  333. RCM_2    andi.w    #E_PLACE,d3
  334.     beq    RCM_3
  335.     moveq    #R_MENU,d0
  336.     moveq    #rl_SIZEOF,d1
  337.     bsr    Res_PlaceList
  338. RCM_3    move.l    d2,d0
  339.     movem.l    (sp)+,d1-d3/a4-a6
  340.     rts
  341.     
  342. R_cmErr        dc.b    'Could not menu structure.',0
  343.  
  344. ;**********************************************************************
  345.  
  346.     cnop    0,4
  347.     
  348.     XDEF    _OpenFile
  349.     XDEF    @OpenFile
  350.     
  351. _OpenFile
  352. @OpenFile
  353. OpenFile:
  354.  
  355.     ;d1    =    fileName
  356.     ;d2    =    accessMode
  357.     ;d3    =    flags
  358.     
  359.     movem.l    d4-d5/a0-a1/a6,-(sp)
  360.     move.l    d1,d4
  361.     move.l    d2,d5
  362.     move.l    _DOSBase(pc),a6
  363. OF_3    jsr    _LVOOpen(a6)
  364.     move.l    d0,d2
  365.     bne    OF_1
  366.     lea    OF_err1(pc),a0
  367.     lea    textArea,a1
  368.     bsr    StrCpy
  369.     move.l    d4,a0
  370.     bsr    StrCpy
  371.     lea    OF_err2(pc),a0
  372.     bsr    StrCpy
  373.     lea    textArea,a0
  374.     bsr    ProduceError
  375.     tst.w    d0
  376.     beq    OF_2
  377.     move.l    d4,d1
  378.     move.l    d5,d2
  379.     bra    OF_3
  380. OF_1    andi.b    #E_PLACE,d3
  381.     beq    OF_2
  382.     moveq    #R_FILE,d0
  383.     moveq    #rl_SIZEOF,d1
  384.     bsr    Res_PlaceList
  385. OF_2    move.l    d2,d0
  386.     movem.l    (sp)+,d4-d5/a0-a1/a6
  387.     rts
  388.  
  389.  
  390. OF_err1        dc.b    'Could not open file "',0
  391. OF_err2        dc.b    '".',0
  392.  
  393. ;**********************************************************************
  394.  
  395.     cnop    0,4
  396.  
  397.     ;d0=memSize
  398.     ;d1=memType
  399.     ;d2.w=memFlags
  400.     
  401.     ;return = d0
  402.     
  403.     ;scrap registers d0,d1
  404.  
  405.     XDEF    _GetMem
  406.     XDEF    @GetMem
  407.     
  408. _GetMem
  409. @GetMem
  410. GetMem:
  411.  
  412.     movem.l    d2/d5-d6/a0-a1/a6,-(sp)
  413.     move.l    d0,d5
  414.     move.l    d1,d6
  415.     move.l    4.w,a6
  416. GM_1    jsr    _LVOAllocMem(a6)
  417.     exg    d0,d2
  418.     tst.l    d2
  419.     bne.b    GM_2
  420.     move.w    d0,d2
  421.     lea    GM_errorMsg(pc),a0
  422.     bsr    ProduceError
  423.     tst.w    d0
  424.     beq    GM_3
  425.     move.l    d5,d0
  426.     move.l    d6,d1
  427.     bra.b    GM_1
  428. GM_2    andi.b    #E_PLACE,d0
  429.     beq.b    GM_3
  430.     moveq    #R_MEMORY,d0
  431.     moveq    #rmr_SIZEOF,d1
  432.     bsr    Res_PlaceList
  433.     move.l    d5,rm_memSize(a0)
  434. GM_3    move.l    d2,d0
  435.     movem.l    (sp)+,d2/d5-d6/a0-a1/a6
  436.     rts
  437.     
  438. GM_errorMsg    dc.b    'Could not allocate enough memory.',0
  439.  
  440. ;**********************************************************************
  441.  
  442.     ;a1    =    libName
  443.     ;d0    =    version No.
  444.     ;d1.w    =    Flags
  445.     ;return    =    d0
  446.     
  447.     XDEF    _R_OpenLibrary
  448.     XDEF    @R_OpenLibrary
  449.     
  450. _R_OpenLibrary
  451. @R_OpenLibrary
  452. R_OpenLibrary:
  453.  
  454.     movem.l    d2-d5/a0/a6,-(sp)
  455.     move.l    d0,d3
  456.     move.w    d1,d5
  457.     move.l    a1,d4
  458.     move.l    4.w,a6
  459. R_OP1a    jsr    _LVOOpenLibrary(a6)
  460.     move.l    d0,d2
  461.     bne    R_OP1
  462.     lea    R_OP_msg1(pc),a0
  463.     lea    textArea,a1
  464.     bsr    StrCpy
  465.     move.l    d4,a0
  466.     bsr    StrCpy
  467.     lea    R_OP_msg2(pc),a0
  468.     bsr    StrCpy
  469.     move.l    d3,d0
  470.     bsr    itoa
  471.     lea    R_OP_msg3(pc),a0
  472.     bsr    StrCpy
  473.     clr.b    (a1)
  474.     lea    textArea,a0
  475.     move.w    d5,d0
  476.     bsr    ProduceError
  477.     tst.w    d0
  478.     beq    R_OP2
  479.     move.l    d3,d0
  480.     move.l    d4,a1
  481.     bra    R_OP1a
  482. R_OP1    andi.w    #E_PLACE,d5
  483.     beq    R_OP2
  484.     moveq    #R_LIBRARY,d0
  485.     moveq    #rl_SIZEOF,d1
  486.     bsr    Res_PlaceList
  487. R_OP2    move.l    d2,d0
  488.     movem.l    (sp)+,a0/d2-d5/a6
  489.     rts
  490.  
  491. R_OP_msg1    dc.b    'Could not open library "',0
  492. R_OP_msg2    dc.b    '" V',0
  493. R_OP_msg3    dc.b    '.',0
  494.  
  495. ;**********************************************************************
  496.     
  497.     cnop    0,4
  498.     
  499.     ;d0    =    msgFlags
  500.     ;return =    d0
  501.     
  502.     XDEF    _R_NewMsgPort
  503.     XDEF    @R_NewMsgPort
  504.         
  505. _R_NewMsgPort
  506. @R_NewMsgPort
  507. R_NewMsgPort:
  508.  
  509.     movem.l    d1-d3/a0-a1/a6,-(sp)
  510.     move.w    d0,d3
  511.     move.l    4.w,a6
  512. R_NMP3    jsr    _LVOCreateMsgPort(a6)
  513.     move.l    d0,d2
  514.     bne    R_NMP1
  515.     lea    R_NMP_errorMsg(pc),a0
  516.     move.l    d3,d0
  517.     bsr    ProduceError
  518.     tst.l    d0
  519.     beq    R_NMP2
  520.     bra    R_NMP3
  521. R_NMP1    andi.b    #E_PLACE,d3
  522.     beq    R_NMP2
  523.     moveq    #R_MSGPORT,d0
  524.     moveq    #rl_SIZEOF,d1
  525.     bsr    Res_PlaceList
  526. R_NMP2    move.l    d2,d0
  527.     movem.l    (sp)+,d1-d3/a0-a1/a6
  528.     rts
  529.  
  530. R_NMP_errorMsg    dc.b    'Could not allocate message port.',0
  531.  
  532. ;**********************************************************************
  533.  
  534.     cnop    0,4
  535.     
  536.     ;a0    =    MsgPort
  537.     ;d0    =    size
  538.     ;d1    =    ioFlags
  539.     ;return    =    d0
  540.     
  541.     XDEF    _R_NewIORequest
  542.     XDEF    @R_NewIORequest
  543.     
  544. _R_NewIORequest
  545. @R_NewIORequest
  546. R_NewIORequest:
  547.  
  548.     movem.l    d2-d4/a1-a2/a6,-(sp)
  549.     move.l    a0,a2
  550.     move.l    d0,d3
  551.     move.w    d1,d4
  552.     move.l    4.w,a6
  553. R_NIO1    jsr    _LVOCreateIORequest(a6)
  554.     move.l    d0,d2
  555.     bne    R_NIO2
  556.     lea    R_NIO_errorMsg(pc),a0
  557.     move.l    d4,d0
  558.     bsr    ProduceError
  559.     tst.l    d0
  560.     beq    R_NIO3
  561.     move.l    a2,a0
  562.     move.l    d3,d0
  563.     bra    R_NIO1
  564. R_NIO2    andi.b    #E_PLACE,d4
  565.     beq    R_NIO3
  566.     moveq    #R_IOREQUEST,d0
  567.     moveq    #rl_SIZEOF,d1
  568.     bsr    Res_PlaceList
  569. R_NIO3    move.l    d2,d0
  570.     movem.l    (sp)+,d2-d4/a1-a2/a6
  571.     rts
  572.     
  573. R_NIO_errorMsg    dc.b    'Could not create IO port',0
  574.     
  575.  
  576. ;**********************************************************************
  577.     
  578.     ;a0    =    device name
  579.     ;d0    =    device unit
  580.     ;a1    =    ioRequest
  581.     ;a2    =    devF
  582.     ;d1    =    device flags
  583.     ;d2    =    flags
  584.  
  585.     cnop    0,4
  586.  
  587.     XDEF    _OpenDeviceRes
  588.     XDEF    @OpenDeviceRes
  589.     
  590. _OpenDeviceRes
  591. @OpenDeviceRes
  592. OpenDeviceRes:
  593.  
  594.     movem.l    d3-d5/a3-a4/a6,-(sp)
  595.     move.l    a0,a4
  596.     move.l    a1,a3
  597.     move.l    d0,d3
  598.     move.l    d1,d4
  599.     move.l    4.w,a6
  600. ODR_1    jsr    _LVOOpenDevice(a6)
  601.     move.l    d0,d5
  602.     beq    ODR_2
  603.     lea    textArea,a1
  604.     lea    ODR_msg1(pc),a0
  605.     bsr    StrCpy
  606.     move.l    a4,a0
  607.     bsr    StrCpy
  608.     lea    ODR_msg2(pc),a0
  609.     bsr    StrCpy
  610.     move.l    d3,d0
  611.     bsr    itoa
  612.     lea    ODR_msg3(pc),a0
  613.     bsr    StrCpy
  614.     clr.b    (a1)
  615.     lea    textArea,a0
  616.     move.l    d2,d0
  617.     bsr    ProduceError
  618.     tst.l    d0
  619.     beq    ODR_3
  620.     move.l    a4,a0
  621.     move.l    a3,a1
  622.     move.l    d3,d0
  623.     move.l    d4,d1
  624.     bra    ODR_1
  625. ODR_2    andi.b    #E_PLACE,d2
  626.     beq    ODR_3
  627.     moveq    #R_DEVICE,d0
  628.     moveq    #rd_SIZEOF,d1
  629.     move.l    a3,d2
  630.     bsr    Res_PlaceList
  631.     move.l    a2,rd_checkFlag(a0)
  632. ODR_3    move.l    d5,d0
  633.     movem.l    (sp)+,d3-d5/a3-a4/a6
  634.     rts
  635.  
  636. ODR_msg1    dc.b    'Could not open "',0
  637. ODR_msg2    dc.b    '" unit-',0
  638. ODR_msg3    dc.b    '.',0
  639.     
  640. ;**********************************************************************
  641.  
  642.     cnop    0,4
  643.     
  644.     ;d0    =    signalNum
  645.     ;d1    =    flags
  646.     ;return    =    d0
  647.     
  648.     XDEF    _NewSignal
  649.     XDEF    @NewSignal
  650.     
  651. _NewSignal
  652. @NewSignal
  653. NewSignal:
  654.  
  655.     movem.l    d2-d4/a0-a1/a6,-(sp)
  656.     move.w    d0,d3
  657.     move.w    d1,d4
  658.     move.l    4.w,a6
  659. NS_1    jsr    _LVOAllocSignal(a6)
  660.     move.l    d0,d2
  661.     tst.b    d0
  662.     bpl    NS_2
  663.     lea    NS_errorMsg(pc),a0
  664.     move.l    d4,d0
  665.     bsr    ProduceError
  666.     tst.w    d0
  667.     beq    NS_3
  668.     move.w    d3,d0
  669.     bra    NS_1
  670. NS_2    andi.b    #E_PLACE,d4
  671.     beq    NS_3
  672.     moveq    #R_SIGNAL,d0
  673.     moveq    #rl_SIZEOF,d1
  674.     bsr    Res_PlaceList
  675. NS_3    move.l    d2,d0
  676.     movem.l    (sp)+,d2-d4/a0-a1/a6
  677.     rts
  678.     
  679. NS_errorMsg    dc.b    'Could not allocate signal bit',0
  680.  
  681. ;**********************************************************************
  682.  
  683.     cnop    0,4
  684.  
  685.     ;d0    =    byteSize
  686.     ;d1    =    attributes
  687.     ;d2    =    flag
  688.     ;return    =    d0
  689.     
  690.     XDEF    _GetVec
  691.     XDEF    @GetVec
  692.     
  693. _GetVec
  694. @GetVec
  695. GetVec:
  696.  
  697.     movem.l    d3-d5/a0-a1/a6,-(sp)
  698.     move.l    d0,d3
  699.     move.l    d1,d4
  700.     move.w    d2,d5
  701.     move.l    4.w,a6
  702. GV_1    jsr    _LVOAllocVec(a6)
  703.     move.l    d0,d2
  704.     bne    GV_2
  705.     lea    GV_errorMsg(pc),a0
  706.     move.l    d5,d0
  707.     bsr    ProduceError
  708.     tst.w    d0
  709.     beq    GV_3
  710.     move.l    d3,d0
  711.     move.l    d4,d1
  712.     bra    GV_1
  713. GV_2    andi.w    #E_PLACE,d5
  714.     beq    GV_3
  715.     moveq    #R_VEC,d0
  716.     moveq    #rl_SIZEOF,d1
  717.     bsr    Res_PlaceList
  718. GV_3    move.l    d2,d0
  719.     movem.l    (sp)+,d3-d5/a0-a1/a6
  720.     rts
  721.  
  722. GV_errorMsg    dc.b    'Not enough memory aviable.',0
  723.     
  724. ;**********************************************************************
  725.  
  726.  
  727.     cnop    0,4
  728.         
  729.     ;a0    =    source
  730.     ;a1    =    destination
  731.     
  732. StrCpy:
  733.     move.b    (a0)+,d0
  734.     beq    ST_E
  735.     move.b    d0,(a1)+
  736.     bra    StrCpy
  737. ST_E    rts
  738.  
  739. ;**********************************************************************
  740.  
  741.     ;d0.l    =    number
  742.     ;a1    =    string buffer
  743.     
  744. itoa:    movem.l    d1-d2/a0,-(sp)
  745.     lea    textAreaB,a0
  746.     tst.l    d0
  747.     bpl    itoa_1a
  748.     move.b    #'-',(a1)+
  749. itoa_1a    moveq    #0,d2
  750. itoa_1    divul.l    #10,d1:d0
  751.     addi.b    #$30,d1
  752.     move.b    d1,(a0)+
  753.     addq.w    #1,d2
  754.     tst.l    d0
  755.     bne    itoa_1
  756.     subq.w    #1,d2
  757. itoa_2    move.b    -(a0),(a1)+
  758.     dbra    d2,itoa_2
  759.     movem.l    (sp)+,d1-d2/a0
  760.     rts
  761.  
  762. ;**********************************************************************
  763.  
  764.     ;d0    =    type
  765.     ;d1    =    sizeof
  766.     ;d2.l    =    item
  767.     ;return    =    a0
  768.  
  769.     ;scrap d0,d1
  770.  
  771.     XDEF    _Res_PlaceList
  772.     XDEF    @Res_PlaceList
  773.     
  774. _Res_PlaceList
  775. @Res_PlaceList    
  776. Res_PlaceList:
  777.  
  778.     movem.l    d3-d4/a1,-(sp)
  779.     move.w    d0,d3
  780.     move.l    d2,d4
  781.     move.l    d1,d0
  782.     moveq    #1,d1
  783.     move.w    #E_RETRYERROR,d2
  784.     bsr    GetMem
  785.     move.l    d0,a0
  786.     tst.l    d0
  787.     beq.w    RPL_1
  788.     tst.l    resList(pc)
  789.     bne    RPL_1a
  790.     move.l    d0,resList
  791.     clr.l    rl_prev(a0)
  792.     bra.w    RPL_3
  793. RPL_1a    move.l    resNext(pc),a1
  794.     move.l    d0,rl_next(a1)
  795.     move.l    a1,rl_prev(a0)
  796. RPL_3    move.l    a0,resNext
  797.     clr.l    rl_next(a0)
  798.     move.w    d3,rl_type(a0)
  799.     move.l    d4,rl_item(a0)
  800.     bra.b    RPL_4
  801. RPL_1    lea    RPL_errorMsg(pc),a0
  802.     bsr    FatalError
  803. RPL_4    move.l    d4,d2
  804.     movem.l    (sp)+,a1/d3-d4
  805.     rts
  806.  
  807. RPL_errorMsg    dc.b    'Not enough memory available.',0
  808.  
  809. ;**********************************************************************
  810.  
  811.     cnop    0,4
  812.     
  813.     XDEF    _ActivateNewResource
  814.     XDEF    @ActivateNewResource
  815.     
  816. _ActivateNewResource
  817. @ActivateNewResource
  818. ActivateNewResource:
  819.  
  820.     bsr    AllocResource
  821.     bsr    ActivateResource
  822.     rts
  823.  
  824. ;**********************************************************************
  825.  
  826.     XDEF    _AllocResource
  827.     XDEF    @AllocResource
  828.     
  829. _AllocResource
  830. @AllocResource
  831. AllocResource:
  832.  
  833.     movem.l    d1-d2/a0-a1,-(sp)
  834.     moveq    #rma_SIZEOF,d0
  835.     move.l    #MEMF_PUBLIC|MEMF_CLEAR,d1
  836.     moveq    #E_FATALERROR,d2
  837.     bsr    GetMem
  838.     move.l    d0,a1
  839.     moveq    #rma_SIZEOF,d0
  840.     move.l    #MEMF_PUBLIC|MEMF_CLEAR,d1
  841.     moveq    #E_FATALERROR,d2
  842.     bsr    GetMem
  843.     move.l    mainList(pc),a0
  844.     tst.l    a0
  845.     beq    AR_1
  846. AR_1a    move.l    rma_next(a0),d1
  847.     beq    AR_1b
  848.     move.l    d1,a0
  849.     bra    AR_1a
  850. AR_1b    move.l    a0,rma_prev(a1)
  851.     move.l    a1,rma_next(a0)
  852.     bra    AR_2
  853. AR_1    move.l    a1,mainList
  854. AR_2    move.l    d0,rma_resList(a1)
  855.     move.l    d0,a0
  856.     move.w    #R_BLANK,rl_type(a0)
  857.     movem.l    (sp)+,d1-d2/a0-a1
  858.     rts
  859.  
  860. ;**********************************************************************
  861.  
  862.     ;d0    =    oldList
  863.  
  864.     XDEF    _RemoveResource
  865.     XDEF    @RemoveResource
  866.     
  867. _RemoveResource
  868. @RemoveResource
  869. RemoveResource:
  870.  
  871.     movem.l    d1-d3/a0-a2/a6,-(sp)
  872.     move.l    mainList(pc),a2
  873.     tst.l    a2
  874.     beq    RR_E
  875. RR_1    cmp.l    rma_resList(a2),d0
  876.     bne    RR_3
  877.     move.l    resList(pc),d2
  878.     move.l    resNext(pc),d3
  879.     bsr    ActivateResource
  880.     bsr    Res_FreeResource
  881.     move.l    rma_prev(a2),a0
  882.     move.l    rma_next(a2),a1
  883.     tst.l    a1
  884.     beq    RR_4
  885.     move.l    a0,rma_prev(a1)
  886. RR_4    tst.l    a0
  887.     beq    RR_5
  888.     move.l    a1,rma_next(a0)
  889. RR_5    move.l    4.w,a6
  890.     move.l    a2,a1
  891.     moveq    #rma_SIZEOF,d0
  892.     jsr    _LVOFreeMem(a6)
  893.     move.l    d2,resList
  894.     move.l    d3,resNext
  895.     bra    RR_E
  896. RR_3    move.l    rma_next(a2),a2
  897.     tst.l    a2
  898.     bne    RR_1
  899. RR_E    movem.l    (sp)+,d1-d3/a0-a2/a6
  900.     rts
  901.  
  902. ;**********************************************************************
  903.  
  904.     ;d0    =    actList
  905.     
  906.     XDEF    _ActivateResource
  907.     XDEF    @ActivateResource
  908.     
  909. _ActivateResource
  910. @ActivateResource
  911. ActivateResource:
  912.  
  913.     movem.l    d0/a0,-(sp)
  914.     move.l    mainList(pc),a0
  915.     tst.l    a0
  916.     beq    ARe_E
  917. ARe_1    cmp.l    rma_resList(a0),d0
  918.     bne    ARe_2
  919.     move.l    rma_resList(a0),a0
  920.     move.l    a0,resList
  921. ARe_4    move.l    rl_next(a0),d0
  922.     beq    ARe_3
  923.     move.l    d0,a0
  924.     bra    ARe_4
  925. ARe_3    move.l    a0,resNext
  926.     bra    ARe_E
  927. ARe_2    move.l    rma_next(a0),a0
  928.     tst.l    a0
  929.     bne    ARe_1
  930. ARe_E    movem.l    (sp)+,d0/a0
  931.     rts
  932.  
  933. ;**********************************************************************
  934.  
  935.     XDEF    _FreeAll
  936.     XDEF    @FreeAll
  937.     
  938. _FreeAll
  939. @FreeAll
  940. FreeAll:
  941.  
  942.     movem.l    d0-d1/a0-a2/a6,-(sp)
  943.     move.l    4.w,a6
  944.     move.l    mainList(pc),a2
  945.     tst.l    a2
  946.     beq    FA_E
  947. FA_1    move.l    rma_next(a2),d0
  948.     beq    FA_2
  949.     move.l    d0,a2
  950.     bra    FA_1
  951. FA_2    move.l    rma_resList(a2),d0
  952.     bsr    ActivateResource
  953.     bsr    Res_FreeResource
  954.     move.l    a2,a1
  955.     move.l    rma_prev(a1),a2
  956.     moveq    #rma_SIZEOF,d0
  957.     jsr    _LVOFreeMem(a6)
  958.     tst.l    a2
  959.     bne    FA_2
  960. FA_E    movem.l    (sp)+,d0-d1/a0-a2/a6
  961.     rts
  962.  
  963. ;**********************************************************************
  964.  
  965.     XDEF    _Res_FreeResource
  966.     XDEF    @Res_FreeResource
  967.     
  968. _Res_FreeResource
  969. @Res_FreeResource
  970. Res_FreeResource:
  971.  
  972.     movem.l    d0-d1/a0-a3/a6,-(sp)
  973.     move.l    resNext(pc),a2
  974.     lea    R_jmpTab(pc),a3
  975. R_1    tst.l    a2
  976.     beq    R_E
  977.     move.l    4.w,a6
  978.     move.w    rl_type(a2),d0
  979.     move.l    (d0.w*4,a3),d0
  980. R_jmp    jmp    (pc,d0.l)
  981. R_mem    move.l    rl_item(a2),a1
  982.     move.l    rm_memSize(a2),d0
  983.     jsr    _LVOFreeMem(a6)
  984.     moveq    #rmr_SIZEOF,d0
  985.     bra    R_2
  986. R_scr    move.l    _IntuitionBase(pc),a6
  987.     move.l    rl_item(a2),a0
  988.     jsr    _LVOCloseScreen(a6)
  989.     moveq    #rl_SIZEOF,d0
  990.     bra    R_2
  991. R_lib    move.l    rl_item(a2),a1
  992.     jsr    _LVOCloseLibrary(a6)
  993.     moveq    #rl_SIZEOF,d0
  994.     bra    R_2
  995. R_bla    moveq    #rl_SIZEOF,d0
  996.     bra    R_2
  997. R_msg    move.l    rl_item(a2),a0
  998.     jsr    _LVODeleteMsgPort(a6)
  999.     moveq    #rl_SIZEOF,d0
  1000.     bra    R_2
  1001. R_ior    move.l    rl_item(a2),a0
  1002.     jsr    _LVODeleteIORequest(a6)
  1003.     moveq    #rl_SIZEOF,d0
  1004.     bra    R_2
  1005. R_dev    move.l    rd_checkFlag(a2),a1
  1006.     tst.b    (a1)
  1007.     beq    R_dev1
  1008.     move.l    rl_item(a2),a1
  1009.     jsr    _LVOCheckIO(a6)
  1010.     tst.l    d0
  1011.     bne    R_dev1
  1012.     move.l    rl_item(a2),a1
  1013.     jsr    _LVOAbortIO(a6)
  1014.     move.l    rl_item(a2),a1
  1015.     jsr    _LVOWaitIO(a6)
  1016. R_dev1    move.l    rl_item(a2),a1
  1017.     jsr    _LVOCloseDevice(a6)
  1018.     moveq    #rd_SIZEOF,d0
  1019.     bra    R_2
  1020. R_fun    move.l    rl_item(a2),a1
  1021.     jsr    (a1)
  1022.     moveq    #rl_SIZEOF,d0
  1023.     bra    R_2
  1024. R_vec    move.l    rl_item(a2),a1
  1025.     jsr    _LVOFreeVec(a6)
  1026.     moveq    #rl_SIZEOF,d0
  1027.     bra    R_2
  1028. R_sig    move.l    rl_item(a2),d0
  1029.     jsr    _LVOFreeSignal(a6)
  1030.     moveq    #rl_SIZEOF,d0
  1031.     bra    R_2
  1032.     
  1033. R_clo    move.l    rl_item(a2),d1
  1034.     move.l    _DOSBase(pc),a6
  1035.     jsr    _LVOClose(a6)
  1036.     moveq    #rl_SIZEOF,d0
  1037.     bra    R_2
  1038.     
  1039. R_vis    move.l    rl_item(a2),a0
  1040.     move.l    _GadToolsBase(pc),a6
  1041.     jsr    _LVOFreeVisualInfo(a6)
  1042.     moveq    #rl_SIZEOF,d0
  1043.     bra    R_2
  1044.     
  1045. R_men    move.l    rl_item(a2),a0
  1046.     move.l    _GadToolsBase(pc),a6
  1047.     jsr    _LVOFreeMenus(a6)
  1048.     moveq    #rl_SIZEOF,d0
  1049.     bra    R_2
  1050.     
  1051. R_win    move.l    rl_item(a2),a0
  1052.     move.l    _IntuitionBase(pc),a6
  1053.     jsr    _LVOCloseWindow(a6)
  1054.     moveq    #rl_SIZEOF,d0
  1055.     bra    R_2
  1056.     
  1057. R_mes    move.l    rl_item(a2),a0
  1058.     move.l    _IntuitionBase(pc),a6
  1059.     jsr    _LVOClearMenuStrip(a6)
  1060.     moveq    #rl_SIZEOF,d0
  1061.     bra    R_2
  1062.  
  1063. R_unl    move.l    rl_item(a2),a1
  1064.     suba.l    a0,a0
  1065.     move.l    _IntuitionBase(pc),a6
  1066.     jsr    _LVOUnlockPubScreen(a6)
  1067.     moveq    #rl_SIZEOF,d0
  1068.     bra    R_2
  1069.     
  1070. R_bmp    move.l    rl_item(a2),a1
  1071.     suba.l    a0,a0
  1072.     move.l    _GfxBase(pc),a6
  1073.     jsr    _LVOFreeBitMap(a6)
  1074.     moveq    #rl_SIZEOF,d0
  1075.     bra    R_2
  1076.  
  1077. R_2    move.l    a2,a1
  1078.     move.l    rl_prev(a1),a2
  1079.     move.l    4.w,a6
  1080.     jsr    _LVOFreeMem(a6)
  1081.     bra    R_1
  1082. R_E    movem.l    (sp)+,d0-d1/a0-a3/a6
  1083.     rts
  1084.  
  1085. R_jmpTab    dc.l    R_mem-R_jmp-2
  1086.         dc.l    R_scr-R_jmp-2
  1087.         dc.l    R_lib-R_jmp-2
  1088.         dc.l    R_bla-R_jmp-2
  1089.         dc.l    R_msg-R_jmp-2
  1090.         dc.l    R_ior-R_jmp-2
  1091.         dc.l    R_dev-R_jmp-2
  1092.         dc.l    R_fun-R_jmp-2
  1093.         dc.l    R_vec-R_jmp-2
  1094.         dc.l    R_sig-R_jmp-2
  1095.         dc.l    R_clo-R_jmp-2
  1096.         dc.l    R_vis-R_jmp-2
  1097.         dc.l    R_men-R_jmp-2
  1098.         dc.l    R_win-R_jmp-2
  1099.         dc.l    R_mes-R_jmp-2
  1100.         dc.l    R_unl-R_jmp-2
  1101.         dc.l    R_bmp-R_jmp-2
  1102.  
  1103. ;**********************************************************************
  1104.     
  1105.     cnop    0,4
  1106.     
  1107.     ;d0    =    errorFlags
  1108.     ;a0    =    errorMsg Ptr.
  1109.     ;d0    =    return( 0=DON'T TRY AGAIN , 1=TRY AGAIN )
  1110.  
  1111.     XDEF    _ProduceError
  1112.     XDEF    @ProduceError
  1113.     
  1114. _ProduceError
  1115. @ProduceError
  1116. ProduceError:
  1117.  
  1118.     move.l    d1,-(sp)
  1119.     move.w    d0,d1
  1120.     andi.b    #E_NOTIFYERROR,d1
  1121.     beq    PE_1
  1122.     bsr    NotifyError
  1123.     moveq    #0,d0
  1124.     bra    PE_E
  1125. PE_1    move.w    d0,d1
  1126.     andi.b    #E_RETRYERROR,d1
  1127.     beq    PE_2
  1128.     bsr    RetryError
  1129.     bra    PE_E
  1130. PE_2    andi.b    #E_FATALERROR,d0
  1131.     beq    PE_3
  1132.     bsr    FatalError
  1133. PE_3    moveq    #0,d0
  1134. PE_E    move.l    (sp)+,d1
  1135.     rts
  1136.     
  1137. ;**********************************************************************
  1138.  
  1139.     ;a0    =    errorMsg
  1140.     ;return    =    d0
  1141.  
  1142.     XDEF    _RetryError
  1143.     XDEF    @RetryError
  1144.  
  1145. _RetryError
  1146. @RetryError
  1147. RetryError:
  1148.  
  1149.     movem.l    d1/a1-a3/a6,-(sp)
  1150.     move.l    _IntuitionBase(pc),a6
  1151.     tst.l    a6
  1152.     beq    RE_E
  1153.     lea    RE_easy(pc),a1
  1154.     move.l    a0,12(a1)
  1155.     suba.l    a0,a0
  1156.     suba.l    a2,a2
  1157.     suba.l    a3,a3
  1158.     jsr    _LVOEasyRequestArgs(a6)
  1159. RE_E    movem.l    (sp)+,d1/a1-a3/a6
  1160.     rts
  1161.     
  1162. RE_easy        dc.l    20,0,RE_title,0,RE_msg
  1163. RE_title    dc.b    'Error',0
  1164. RE_msg        dc.b    'Retry|Cancel',0
  1165.     
  1166.  
  1167. ;**********************************************************************
  1168.  
  1169.     cnop    0,4
  1170.     
  1171.     XDEF    _NotifyError
  1172.     XDEF    @NotifyError
  1173.     
  1174. _NotifyError
  1175. @NotifyError
  1176. NotifyError:
  1177.  
  1178.     movem.l    d1/a1-a3/a6,-(sp)
  1179.     move.l    _IntuitionBase(pc),a6
  1180.     tst.l    a6
  1181.     beq    NE_E
  1182.     lea    NE_easy(pc),a1
  1183.     move.l    a0,12(a1)
  1184.     suba.l    a0,a0
  1185.     suba.l    a2,a2
  1186.     suba.l    a3,a3
  1187.     jsr    _LVOEasyRequestArgs(a6)
  1188. NE_E    movem.l    (sp)+,d1/a1-a3/a6
  1189.     rts
  1190.  
  1191. NE_easy        dc.l    20,0,NE_title,0,NE_msg
  1192. NE_title    dc.b    'Message',0
  1193. NE_msg        dc.b    'OK',0
  1194.  
  1195.  
  1196. ;**********************************************************************
  1197.     
  1198.     cnop    0,4
  1199.     
  1200.     XDEF    _FatalError
  1201.     XDEF    @FatalError
  1202.     
  1203. _FatalError
  1204. @FatalError
  1205. FatalError:
  1206.  
  1207.     movem.l    d0-d1/a1-a3/a6,-(sp)
  1208.     move.l    _IntuitionBase(pc),a6
  1209.     tst.l    a6
  1210.     beq    FE_1
  1211.     lea    FE_easy(pc),a1
  1212.     move.l    a0,12(a1)
  1213.     suba.l    a0,a0
  1214.     suba.l    a2,a2
  1215.     suba.l    a3,a3
  1216.     jsr    _LVOEasyRequestArgs(a6)
  1217.     bsr    FreeAll
  1218. FE_1    move.l    originalStack(pc),d0
  1219.     beq    FE_2
  1220.     move.l    d0,sp
  1221.     rts
  1222. FE_2    lea    FE_dosname(pc),a1
  1223.     moveq    #0,d0
  1224.     moveq    #E_RETRYERROR,d1
  1225.     bsr    R_OpenLibrary
  1226.     tst.l    d0
  1227.     beq    FE_3
  1228.     move.l    d0,a6
  1229.     moveq    #-1,d0
  1230.     jsr    _LVOExit(a6)
  1231. FE_3    movem.l    (sp)+,d0-d1/a1-a3/a6
  1232.     rts
  1233.     
  1234.  
  1235. FE_easy        dc.l    20,0,FE_title,0,FE_msg
  1236. FE_title    dc.b    'Fatal Error',0
  1237. FE_msg        dc.b    'OK',0
  1238. FE_dosname    dc.b    'dos.library',0
  1239.  
  1240. ;**********************************************************************
  1241.  
  1242.  
  1243.     section resource_data,bss
  1244.     
  1245. textArea    ds.b    200
  1246. textAreaB    ds.b    100